#pragma once

#include <driver/i2c.h>
#include <esp_log.h>

// I2C配置参数
#define I2C_MASTER_NUM              I2C_NUM_0
#define I2C_MASTER_FREQ_HZ          100000     // 标准模式
#define I2C_MASTER_SDA_IO           8          // 根据实际接线修改
#define I2C_MASTER_SCL_IO           9          // 根据实际接线修改
#define I2C_MASTER_RX_BUF_DISABLE   0
#define I2C_MASTER_TX_BUF_DISABLE   0

/**
 * @brief 初始化I2C主机模式
 * @return esp_err_t 返回初始化结果
 */
esp_err_t i2c_master_init(void);

/**
 * @brief I2C总线扫描
 * @param[out] found_addresses 存储找到的设备地址（可选）
 * @param[in] max_addresses 数组最大容量
 * @return int 找到的设备数量
 */
int i2c_scan(uint8_t *found_addresses, int max_addresses);

/**
 * @brief I2C写数据
 * @param addr 设备地址
 * @param reg 寄存器地址
 * @param data 要写入的数据
 * @param len 数据长度
 * @return esp_err_t 
 */
esp_err_t i2c_write(uint8_t addr, uint8_t reg, const uint8_t *data, size_t len);

/**
 * @brief I2C读数据
 * @param addr 设备地址
 * @param reg 寄存器地址
 * @param data 存储读取数据的缓冲区
 * @param len 要读取的数据长度
 * @return esp_err_t 
 */
esp_err_t i2c_read(uint8_t addr, uint8_t reg, uint8_t *data, size_t len);